package models; import java.util.Date; import java.util.concurrent.ArrayBlockingQueue; import views.MainView; /** * The queue thread * */ public class Server implements Runnable { private ArrayBlockingQueue<Task> tasks; private String name; private volatile boolean isShutdown = false; public Server(String name, int maxLoadPerServer) { this.tasks = new ArrayBlockingQueue<>(maxLoadPerServer); this.name = name; } @Override public void run() { while (!(isShutdown)) { try { Task task = tasks.peek(); if (task != null) { task.setWaitingTime(System.currentTimeMillis() - task.getArrivalTime()); MainView.getLogging().append(task.getName() + " is being served at " + name + " at time " + String.format("%tT", new Date(System.currentTimeMillis())) + "\n"); Thread.sleep(task.getServiceTime()); task.setFinishTime(System.currentTimeMillis()); MainView.getLogging().append(task.getName() + " has been served at time " + String.format("%tT", new Date(System.currentTimeMillis())) + "\n"); tasks.poll(); TaskScheduler.getInstance().getCurrentCustomers().getAndDecrement(); } } catch (InterruptedException e) { return; } } } public ArrayBlockingQueue<Task> getTasks() { return tasks; } public void setTasks(ArrayBlockingQueue<Task> tasks) { this.tasks = tasks; } public String getName() { return name; } public void setShutdown(boolean isShutdown) { this.isShutdown = isShutdown; } public boolean isShutdown() { return isShutdown; } }